.\" Copyright (C) 1994, 1995, Daniel Quinlan <quinlan@yggdrasil.com>
.\" Copyright (C) 2002-2008, 2017, Michael Kerrisk <mtk.manpages@gmail.com>
.\" Copyright (C) 2023, Alejandro Colomar <alx@kernel.org>
.\"
.\" SPDX-License-Identifier: GPL-3.0-or-later
.\"
.TH proc_pid_io 5 2024-05-02 "Linux man-pages 6.9.1"
.SH NAME
/proc/pid/io \- I/O statistics
.SH DESCRIPTION
.TP
.IR /proc/ pid /io " (since Linux 2.6.20)"
.\" commit 7c3ab7381e79dfc7db14a67c6f4f3285664e1ec2
This file contains I/O statistics
for the process and its waited-for children,
for example:
.IP
.in +4n
.EX
.RB "#" " cat /proc/3828/io"
rchar: 323934931
wchar: 323929600
syscr: 632687
syscw: 632675
read_bytes: 0
write_bytes: 323932160
cancelled_write_bytes: 0
.EE
.in
.IP
The fields are as follows:
.RS
.TP
.IR rchar ": characters read"
The number of bytes
returned by successful
.BR read (2)
and similar system calls.
.TP
.IR wchar ": characters written"
The number of bytes
returned by successful
.BR write (2)
and similar system calls.
.TP
.IR syscr ": read syscalls"
The number of "file read" system calls\[em]those from the
.BR read (2)
family,
.BR sendfile (2),
.BR copy_file_range (2),
and
.BR ioctl (2)
.BR BTRFS_IOC_ENCODED_READ [ _32 ]
(including when invoked by the kernel as part of other syscalls).
.TP
.IR syscw ": write syscalls"
The number of "file write" system calls\[em]those from the
.BR write (2)
family,
.BR sendfile (2),
.BR copy_file_range (2),
and
.BR ioctl (2)
.BR BTRFS_IOC_ENCODED_WRITE [ _32 ]
(including when invoked by the kernel as part of other syscalls).
.TP
.IR read_bytes ": bytes read"
The number of bytes really fetched from the storage layer.
This is accurate for block-backed filesystems.
.TP
.IR write_bytes ": bytes written"
The number of bytes really sent to the storage layer.
.TP
.IR cancelled_write_bytes :
The above statistics fail to account for truncation:
if a process writes 1 MB to a regular file and then removes it,
said 1 MB will not be written, but
.I will
have nevertheless been accounted as a 1 MB write.
This field represents the number of bytes "saved" from I/O writeback.
This can yield to having done negative I/O
if caches dirtied by another process are truncated.
.I cancelled_write_bytes
applies to I/O already accounted-for in
.IR write_bytes .
.RE
.IP
Permission to access this file is governed by
.BR ptrace (2)
access mode
.BR PTRACE_MODE_READ_FSCREDS .
.SH CAVEATS
These counters are not atomic:
on systems where 64-bit integer operations may tear,
a counter could be updated simultaneously with a read,
yielding an incorrect intermediate value.
.SH SEE ALSO
.BR getrusage (2),
.BR proc (5)
